library(data.table)
## Warning: package 'data.table' was built under R version 3.6.2
library(sqldf)
## Warning: package 'sqldf' was built under R version 3.6.2
## Loading required package: gsubfn
## Warning: package 'gsubfn' was built under R version 3.6.2
## Loading required package: proto
## Warning: package 'proto' was built under R version 3.6.2
## Loading required package: RSQLite
## Warning: package 'RSQLite' was built under R version 3.6.2
library(plotly)
## Warning: package 'plotly' was built under R version 3.6.2
## Loading required package: ggplot2
## Warning: package 'ggplot2' was built under R version 3.6.2
## 
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
## 
##     last_plot
## The following object is masked from 'package:stats':
## 
##     filter
## The following object is masked from 'package:graphics':
## 
##     layout
library(crosstalk)
## Warning: package 'crosstalk' was built under R version 3.6.2
library(DT)
## Warning: package 'DT' was built under R version 3.6.2
##Passing
Passing <- fread('Career_Stats_Passing.csv', stringsAsFactors = F)
#Passing <- subset(Passing, Year %in% 2016)
names(Passing) <- gsub(" ", "_", names(Passing))
Passing$Passes_Attempted<-as.numeric(Passing$Passes_Attempted)
## Warning: NAs introduced by coercion
Passing$Passes_Completed<-as.numeric(Passing$Passes_Completed)
## Warning: NAs introduced by coercion
Passing$Completion_Percentage<-as.numeric(Passing$Completion_Percentage)
## Warning: NAs introduced by coercion
Passing$Passing_Yards <- as.numeric(gsub(",", "", Passing$Passing_Yards))
## Warning: NAs introduced by coercion
Passing$TD_Passes<-as.numeric(Passing$TD_Passes)
## Warning: NAs introduced by coercion
Passing$Passing_Yards_Per_Game<-as.numeric(Passing$Passing_Yards_Per_Game)
## Warning: NAs introduced by coercion
Passing <- subset(Passing, Year %in% 2015 & Passes_Attempted > 10 & Games_Played>4)

##Rushing
Rushing <- fread('Career_Stats_Rushing.csv', stringsAsFactors = F)
#Rushing <- subset(Rushing, Year %in% 2016)
names(Rushing) <- gsub(" ", "_", names(Rushing))
Rushing$Rushing_Attempts<-as.numeric(Rushing$Rushing_Attempts)
## Warning: NAs introduced by coercion
Rushing$Rushing_Yards<- as.numeric(gsub(",", "", Rushing$Rushing_Yards))
## Warning: NAs introduced by coercion
Rushing$Rushing_TDs<-as.numeric(Rushing$Rushing_TDs)
## Warning: NAs introduced by coercion
Rushing <- subset(Rushing, Year %in% 2015 & Rushing_Attempts > 10 & Games_Played>4)


##Receiving

Receiving <- fread('Career_Stats_Receiving.csv', stringsAsFactors = F)
names(Receiving) <- gsub(" ", "_", names(Receiving))
Receiving$Receptions<-as.numeric(Receiving$Receptions)
## Warning: NAs introduced by coercion
Receiving$Receiving_Yards<- as.numeric(gsub(",", "", Receiving$Receiving_Yards))
## Warning: NAs introduced by coercion
Receiving$Receiving_TDs<-as.numeric(Receiving$Receiving_TDs)
## Warning: NAs introduced by coercion
Receiving <- subset(Receiving, Year %in% 2015 & Receptions > 10 & Games_Played>4)



all <- merge(Rushing, Receiving, by = "Player_Id", all = T)
all <- merge(all, Passing, by = "Player_Id", all = T)

all$Position <- ifelse(!is.na(all$Position.x), all$Position.x, all$Position.y)
all$Position <- ifelse(!is.na(all$Position), all$Position, all$Position)
all$Position <- ifelse(!is.na(all$Position.x), all$Position.x, all$Position.y)
all$MAINName <- ifelse(!is.na(all$Name.x), all$Name.x, all$Name.y)
all$MAINName <- ifelse(!is.na(all$MAINName), all$MAINName, all$Name)
all$Total_Games_Played <- ifelse(!is.na(all$Games_Played.x), all$Games_Played.x, all$Games_Played.y)
all$Total_Games_Played <- ifelse(!is.na(all$Total_Games_Played), all$Total_Games_Played, all$Games_Played)
all$MAINTeam <- ifelse(!is.na(all$Team.x), all$Team.x, all$Team.y)
all$MAINTeam <- ifelse(!is.na(all$MAINTeam), all$MAINTeam, all$Team)

all$Name <- all$MAINName
all$Team <- all$MAINTeam


#all[,c('Player_Id',56,57,58,7,9,12,25)]
df<-all[,c('Player_Id', 'Name', 'Position', 'Team','Total_Games_Played', 'Rushing_Attempts','Rushing_Yards', 
           'Rushing_TDs', 'Receptions', 'Receiving_Yards', 'Receiving_TDs',
           'Passes_Completed', 'Passing_Yards', 'TD_Passes')]
df[is.na(df)] <- 0
df$Position <- gsub('0', 'QB', df$Position)
df$Position <- gsub('FB', 'RB', df$Position)


a <- sqldf("select Player_Id,
           Name,
           Position,
           Team,
           Total_Games_Played,
           Rushing_Yards+Receiving_Yards+Passing_Yards as Yards,
           (Rushing_Yards+Receiving_Yards+Passing_Yards)/Total_Games_Played as AvgYardsPerGame,
           Rushing_TDs+Receiving_TDs+TD_Passes as Touchdowns,
           (Rushing_TDs+Receiving_TDs+TD_Passes)/Total_Games_Played as AvgTouchdownsPerGame,
           Passes_Completed+Receptions+Rushing_Attempts as Completions,
           (Passes_Completed+Receptions+Rushing_Attempts)/Total_Games_Played as AvgCompletionsPerGame
           from df")

##Create Shared Data element
sd <- SharedData$new(a)

##Create Chart 1
x <- list(
  title = "Avg Yards Per Game (Rushing, Receiving, Passing)"
)
y <- list(
  title = "Avg TDs Per Game (Rushing, Receiving, Passing)"
)

p<-plot_ly(sd, x = ~AvgYardsPerGame, y = ~AvgTouchdownsPerGame, color = ~Position, 
           #width="100%", height=400,
           mode = 'markers', symbol = ~Position, symbols = c('circle','x','o', '+'), marker = list(size = 8),
           text = ~paste('Name: ', Name,
                         '</br> Team: ', Team))%>%
  layout(title = 'Avg Yards v Touchdowns',
         xaxis = x, yaxis = y) %>% 
  config(displayModeBar = F)

##Create Chart 2
ppr<- plot_ly(sd, x = ~AvgYardsPerGame, y = ~AvgCompletionsPerGame, type = 'scatter', color = ~Position, 
              #width="100%", height=400,
              mode = 'markers', symbol = ~Position, symbols = c('circle','x','o', '+'), marker = list(size = 8),
              text = ~paste('Name: ', Name,
                            '</br> Team: ', Team)
              #mode = 'text', text = ~Name, textposition = 'middle right', textfont = list(size = 8)
)%>%
  layout( title = 'Avg Yards v Completions',
          xaxis = list(title = 'Avg Yards Per Game (Rushing, Receiving, Passing)'),
          yaxis = list(title = 'Avg Completions Per Game (Rushing, Receiving, Passing)')) %>% 
  config(displayModeBar = F)

##create datatable
dt <- datatable(sd, extensions="Scroller", style="bootstrap", class="compact",
                options=list(initComplete = JS(
                  "function(settings, json) {",
                  "$(this.api().table().header()).css({'background-color': '#F8F8F8', 'color': '#000'});",
                  "}"), columnDefs = list(list(visible=FALSE, targets=c(1,7,9,11)))))


##Create Crosstalk Widget
bscols(     
  list(filter_checkbox("Position", "Position", sd, ~Position, inline = TRUE),
       filter_select("Team", "Team", sd, ~Team,multiple=T))
)
p   
## No trace type specified:
##   Based on info supplied, a 'scatter' trace seems appropriate.
##   Read more about this trace type -> https://plot.ly/r/reference/#scatter
## Warning: The following are not valid symbol codes:
## 'NA'
## Valid symbols include:
## '0', 'circle', '100', 'circle-open', '200', 'circle-dot', '300', 'circle-open-dot', '1', 'square', '101', 'square-open', '201', 'square-dot', '301', 'square-open-dot', '2', 'diamond', '102', 'diamond-open', '202', 'diamond-dot', '302', 'diamond-open-dot', '3', 'cross', '103', 'cross-open', '203', 'cross-dot', '303', 'cross-open-dot', '4', 'x', '104', 'x-open', '204', 'x-dot', '304', 'x-open-dot', '5', 'triangle-up', '105', 'triangle-up-open', '205', 'triangle-up-dot', '305', 'triangle-up-open-dot', '6', 'triangle-down', '106', 'triangle-down-open', '206', 'triangle-down-dot', '306', 'triangle-down-open-dot', '7', 'triangle-left', '107', 'triangle-left-open', '207', 'triangle-left-dot', '307', 'triangle-left-open-dot', '8', 'triangle-right', '108', 'triangle-right-open', '208', 'triangle-right-dot', '308', 'triangle-right-open-dot', '9', 'triangle-ne', '109', 'triangle-ne-open', '209', 'triangle-ne-dot', '309', 'triangle-ne-open-dot', '10', 'triangle-se', '110', 'triangle-se-open', '210', 'triangle-se-dot', '310', 'triangle-se-open-dot', '11', 'triangle-sw', '111', 'triangle-sw-open', '211', 'triangle-sw-dot', '311', 'triangle-sw-open-dot', '12', 'triangle-nw', '112', 'triangle-nw-open', '212', 'triangle-nw-dot', '312', 'triangle-nw-open-dot', '13', 'pentagon', '113', 'pentagon-open', '213', 'pentagon-dot', '313', 'pentagon-open-dot', '14', 'hexagon', '114', 'hexagon-open', '214', 'hexagon-dot', '314', 'hexagon-open-dot', '15', 'hexagon2', '115', 'hexagon2-open', '215', 'hexagon2-dot', '315', 'hexagon2-open-dot', '16', 'octagon', '116', 'octagon-open', '216', 'octagon-dot', '316', 'octagon-open-dot', '17', 'star', '117', 'star-open', '217', 'star-dot', '317', 'star-open-dot', '18', 'hexagram', '118', 'hexagram-open', '218', 'hexagram-dot', '318', 'hexagram-open-dot', '19', 'star-triangle-up', '119', 'star-triangle-up-open', '219', 'star-triangle-up-dot', '319', 'star-triangle-up-open-dot', '20', 'star-triangle-down', '120', 'star-triangle-down-open', '220', 'star-triangle-down-dot', '320', 'star-triangle-down-open-dot', '21', 'star-square', '121', 'star-square-open', '221', 'star-square-dot', '321', 'star-square-open-dot', '22', 'star-diamond', '122', 'star-diamond-open', '222', 'star-diamond-dot', '322', 'star-diamond-open-dot', '23', 'diamond-tall', '123', 'diamond-tall-open', '223', 'diamond-tall-dot', '323', 'diamond-tall-open-dot', '24', 'diamond-wide', '124', 'diamond-wide-open', '224', 'diamond-wide-dot', '324', 'diamond-wide-open-dot', '25', 'hourglass', '125', 'hourglass-open', '26', 'bowtie', '126', 'bowtie-open', '27', 'circle-cross', '127', 'circle-cross-open', '28', 'circle-x', '128', 'circle-x-open', '29', 'square-cross', '129', 'square-cross-open', '30', 'square-x', '130', 'square-x-open', '31', 'diamond-cross', '131', 'diamond-cross-open', '32', 'diamond-x', '132', 'diamond-x-open', '33', 'cross-thin', '133', 'cross-thin-open', '34', 'x-thin', '134', 'x-thin-open', '35', 'asterisk', '135', 'asterisk-open', '36', 'hash', '136', 'hash-open', '236', 'hash-dot', '336', 'hash-open-dot', '37', 'y-up', '137', 'y-up-open', '38', 'y-down', '138', 'y-down-open', '39', 'y-left', '139', 'y-left-open', '40', 'y-right', '140', 'y-right-open', '41', 'line-ew', '141', 'line-ew-open', '42', 'line-ns', '142', 'line-ns-open', '43', 'line-ne', '143', 'line-ne-open', '44', 'line-nw', '144', 'line-nw-open
ppr
## Warning: The following are not valid symbol codes:
## 'NA'
## Valid symbols include:
## '0', 'circle', '100', 'circle-open', '200', 'circle-dot', '300', 'circle-open-dot', '1', 'square', '101', 'square-open', '201', 'square-dot', '301', 'square-open-dot', '2', 'diamond', '102', 'diamond-open', '202', 'diamond-dot', '302', 'diamond-open-dot', '3', 'cross', '103', 'cross-open', '203', 'cross-dot', '303', 'cross-open-dot', '4', 'x', '104', 'x-open', '204', 'x-dot', '304', 'x-open-dot', '5', 'triangle-up', '105', 'triangle-up-open', '205', 'triangle-up-dot', '305', 'triangle-up-open-dot', '6', 'triangle-down', '106', 'triangle-down-open', '206', 'triangle-down-dot', '306', 'triangle-down-open-dot', '7', 'triangle-left', '107', 'triangle-left-open', '207', 'triangle-left-dot', '307', 'triangle-left-open-dot', '8', 'triangle-right', '108', 'triangle-right-open', '208', 'triangle-right-dot', '308', 'triangle-right-open-dot', '9', 'triangle-ne', '109', 'triangle-ne-open', '209', 'triangle-ne-dot', '309', 'triangle-ne-open-dot', '10', 'triangle-se', '110', 'triangle-se-open', '210', 'triangle-se-dot', '310', 'triangle-se-open-dot', '11', 'triangle-sw', '111', 'triangle-sw-open', '211', 'triangle-sw-dot', '311', 'triangle-sw-open-dot', '12', 'triangle-nw', '112', 'triangle-nw-open', '212', 'triangle-nw-dot', '312', 'triangle-nw-open-dot', '13', 'pentagon', '113', 'pentagon-open', '213', 'pentagon-dot', '313', 'pentagon-open-dot', '14', 'hexagon', '114', 'hexagon-open', '214', 'hexagon-dot', '314', 'hexagon-open-dot', '15', 'hexagon2', '115', 'hexagon2-open', '215', 'hexagon2-dot', '315', 'hexagon2-open-dot', '16', 'octagon', '116', 'octagon-open', '216', 'octagon-dot', '316', 'octagon-open-dot', '17', 'star', '117', 'star-open', '217', 'star-dot', '317', 'star-open-dot', '18', 'hexagram', '118', 'hexagram-open', '218', 'hexagram-dot', '318', 'hexagram-open-dot', '19', 'star-triangle-up', '119', 'star-triangle-up-open', '219', 'star-triangle-up-dot', '319', 'star-triangle-up-open-dot', '20', 'star-triangle-down', '120', 'star-triangle-down-open', '220', 'star-triangle-down-dot', '320', 'star-triangle-down-open-dot', '21', 'star-square', '121', 'star-square-open', '221', 'star-square-dot', '321', 'star-square-open-dot', '22', 'star-diamond', '122', 'star-diamond-open', '222', 'star-diamond-dot', '322', 'star-diamond-open-dot', '23', 'diamond-tall', '123', 'diamond-tall-open', '223', 'diamond-tall-dot', '323', 'diamond-tall-open-dot', '24', 'diamond-wide', '124', 'diamond-wide-open', '224', 'diamond-wide-dot', '324', 'diamond-wide-open-dot', '25', 'hourglass', '125', 'hourglass-open', '26', 'bowtie', '126', 'bowtie-open', '27', 'circle-cross', '127', 'circle-cross-open', '28', 'circle-x', '128', 'circle-x-open', '29', 'square-cross', '129', 'square-cross-open', '30', 'square-x', '130', 'square-x-open', '31', 'diamond-cross', '131', 'diamond-cross-open', '32', 'diamond-x', '132', 'diamond-x-open', '33', 'cross-thin', '133', 'cross-thin-open', '34', 'x-thin', '134', 'x-thin-open', '35', 'asterisk', '135', 'asterisk-open', '36', 'hash', '136', 'hash-open', '236', 'hash-dot', '336', 'hash-open-dot', '37', 'y-up', '137', 'y-up-open', '38', 'y-down', '138', 'y-down-open', '39', 'y-left', '139', 'y-left-open', '40', 'y-right', '140', 'y-right-open', '41', 'line-ew', '141', 'line-ew-open', '42', 'line-ns', '142', 'line-ns-open', '43', 'line-ne', '143', 'line-ne-open', '44', 'line-nw', '144', 'line-nw-open
datatable(sd, extensions="Scroller", style="bootstrap", class="compact",
          #width="100%", height=400,
          options=list(initComplete = JS(
            "function(settings, json) {",
            "$(this.api().table().header()).css({'background-color': '#F8F8F8', 'color': '#000'});",
            "}"), columnDefs = list(list(visible=FALSE, targets=c(1,7,9,11)))))